package com.bd.scm.module.device.service;


import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bd.scm.domain.dto.device.DeviceDto;
import com.bd.scm.domain.dto.device.DzStDeviceDto;
import com.bd.scm.domain.dto.device.GetDeviceDto;
import com.bd.scm.domain.dto.door.DoorDto;
import com.bd.scm.domain.models.device.DzStDevice;
import com.bd.scm.domain.models.device.JuserKqRecord;
import com.bd.scm.domain.models.device.ShowStDevice;
import com.bd.scm.domain.models.device.StDevice;

import java.util.List;

/**
 * <p>
 * 设备管理服务类
 * </p>
 *
 * @author Mason
 * @since 2019-09-03
 */
public interface StDeviceService extends IService<StDevice> {

    /**
     * @param doorDto 查询条件与门tree一样公用一个DTO
     * @return
     */
    IPage<StDevice> getStDeviceList(DoorDto doorDto);

    /**
     * 根据场所ID获取场所下设备数量.
     *
     * @param placeId 场所Id
     * @return 设备数量
     */
    Integer getDeviceCountByPlaceId(Long placeId);

    /**
     * 设备管理界面--获取设备列表.
     *
     * @param getDeviceDto 查询条件
     * @return page信息
     */
    IPage<ShowStDevice> getDevicePages(GetDeviceDto getDeviceDto);

    /**
     * 获取设备最大编号+1.
     *
     * @return 现有最大编号+1
     */
    String getMaxIdFromDevices();

    /**
     * 新增设备.
     *
     * @param deviceDto 新增设备的信息.
     */
    void saveDevice(DeviceDto deviceDto);

    /**
     * 根据bh获取设备信息.
     *
     * @param deviceDto 含有bh
     * @return 设备信息
     */
    DeviceDto getDeviceByBh(DeviceDto deviceDto);

    /**
     * 修改设备.
     *
     * @param deviceDto 修改设备的信息.
     */
    void editDevice(DeviceDto deviceDto);

    /**
     * 删除设备.
     *
     * @param deviceDto bh.
     */
    void deleteDevice(DeviceDto deviceDto);

    // 大众考勤系统

    // 查询
    IPage<DzStDevice> getDzStDeviceList(Page<DzStDevice> page, DzStDeviceDto dzStDeviceDto);

    // 添加
    String insertDzStDevice(DzStDeviceDto dzStDeviceDto);

    // 修改
    String updateDzStDevice(DzStDeviceDto dzStDeviceDto);

    // 删除
    String deleteDzStDevice(DzStDeviceDto dzStDeviceDto);

    /**
     * 手机打卡数据保存
     * @param juserKqRecord
     * @return
     */
    String saveJuserKqRecord(JuserKqRecord juserKqRecord);

    /**
     * 手机端定位当天上下班是否已打卡接口开发，返回前端上班是否已打卡，下班是否已打卡
     * @param dzStDeviceDto
     * @return
     */
    List<JSONObject> getUserTtTaskCard(DzStDeviceDto dzStDeviceDto);
}
